import json
from ronglian_sms_sdk import SmsSDK

# accId = '容联云通讯分配的主账号ID'
accId = "2c94811c9035ff9f019094f25fbf1505"
# accToken = '容联云通讯分配的主账号TOKEN'
accToken = "36203bb49ee34fb7adf238714285f27f"
# appId = '容联云通讯分配的应用ID'
appId = "2c94811c9035ff9f019094f2616f150c"


class SmsSingleton:
    _instance = None  # 用于存储单例实例的类属性

    def __new__(cls, *args, **kwargs):
        """
        单例模式的实现，确保SmsSingleton类只有一个实例
        """
        if cls._instance is None:  # 如果实例不存在
            """
            确保 SmsSingleton 类只有一个实例。为了理解这句话的作用，先要理解几个概念：单例模式、__new__ 方法以及 super 函数。
            单例模式
            单例模式是一种创建对象的设计模式，其目的是确保某个类只有一个实例存在。常见的应用场景包括数据库连接池、线程池等。
            __new__ 方法
            在 Python 中，__new__ 方法负责创建并返回一个实例。它在 __init__ 方法之前被调用，是一个类方法，可以控制实例的创建过程。
            super 函数
            super 函数用于调用父类的方法。super(SmsSingleton, cls).__new__(cls) 调用的是父类的 __new__ 方法。
            """
            cls._instance = super(SmsSingleton, cls).__new__(cls)  # 创建新实例
            cls._instance.sdk = SmsSDK(accId, accToken, appId)  # 初始化SmsSDK实例
        return cls._instance  # 返回单例实例

    def send_message(self, tid, mobile, datas):
        """
        发送短信验证码
        :param tid: 短信模板ID
        :param mobile: 接收短信的手机号（多个号码以逗号分隔）
        :param datas: 短信模板变量
        :return: 0表示发送成功，-1表示发送失败
        """
        resp = self.sdk.sendMessage(tid, mobile, datas)  # 发送短信，获取响应
        resp_dict = json.loads(resp)  # 将响应字符串转换为字典

        # 获取响应中的statusCode
        status_code = resp_dict.get("statusCode")  # 获取字典中的状态码
        if status_code == "000000":  # 检查状态码是否为"000000"，表示发送成功
            return 0  # 返回0表示发送成功
        else:
            return -1  # 返回-1表示发送失败

if __name__ == '__main__':
    # tid = '容联云通讯平台创建的模板'
    tid = "1"
    # mobile = '手机号1,手机号2'
    mobile = "15208224989"
    # datas = ('变量1', '变量2')
    datas = ('1234', '5')  # 例如：验证码是1234，5分钟内有效

    sms_singleton = SmsSingleton()
    code = sms_singleton.send_message(tid, mobile, datas)
    print(code)